package study.itwill.common;

import java.io.InputStream;

import org.apache.log4j.Logger;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

public class XmlParser {
	
	static Logger logger = Logger.getLogger(XmlParser.class);
	
	public static XmlParser current = null;
	
	public static XmlParser getInstance() {
		if (current == null) {
			current = new XmlParser();
		}
		return current;
	}
	
	public static void freeInstance() {
		if (current != null) {
			current = null;
		}
	}
	
	public XmlPullParser getParser(String url, String encoding) {
		
		logger.debug("=========== method start >> getParser");
		
		logger.debug("XML파서 생성 >> " + url);
		
		XmlPullParser parser = null;

		/** 통신처리 */
		// 접속 후 결과를 리턴받기
		InputStream is = HttpHandler.getInstance().connect(url, encoding);

		// 결과가 null이라면 통신에 실패한 상황이므로...
		if (is == null) {
			logger.error("XmlParser >> 통신에러 발생함");
			// 강제 종료
			return null;
		}

		/************ XML 데이터 처리 시작 ***********/
		// XML파서 생성기
		XmlPullParserFactory factory = null;

		// 객체 생성
		try {
			factory = XmlPullParserFactory.newInstance();
			parser = factory.newPullParser();

			/** 읽은 내용(InputStream)을 parser에게 전달 파일의
			 * 인코딩 타입을 지정해 주어야 함 */
			parser.setInput(is, encoding);
		} catch (XmlPullParserException e) {
			logger.error("XmlParser >> 파서 생성 실패 - " + e.toString());
			logger.error(e.getLocalizedMessage());
			logger.error(e.getStackTrace());
		}
		
		logger.debug("=========== method end >> getParser");

		return parser;
	}
	
	public XmlPullParser getParser(String url) {
		
		logger.debug("=========== method start >> getParser");
		
		XmlPullParser parser = getParser(url, "utf-8");
		
		logger.debug("=========== method end >> getParser");
		
		return parser;
	}
}



